package com.producer.producer.suanfa;

public class ArrayQueue {
    private int font; //取出数据时用到的下标 从第一个的前面一个算
    private int rear; //存放数据的位置下标 从最后一个的后面一个算
    private int maxSize;  //队列的容量
    private int[] arraydata; //用于存放队列的数据

    //创建构造器
    public ArrayQueue(int n){
        font=-1;//用-1 代表开始位置
        rear = -1; //用-1 代表结束位置
        maxSize=n;
        arraydata=new int[maxSize];
    }

    //追加
    public void add(int param){
        //校验是否已经满了
        if((maxSize-1)==rear){
            System.out.println("队列已经满了==");
            return;
        }
        rear++;
        arraydata[rear]=param;
    }

    //出队列
    public int getQueue(){
        //判断队列是否为空
        if(font==rear){
            throw new RuntimeException("队列是空的");
        }
        font++;
        return arraydata[font];
    }

    //获取所有的数据
    public void show(){
        //校验数据是否为空
        if(font==rear){
            System.out.println("队列是空的");
            return;
        }
        for (int i = 0; i < arraydata.length; i++) {
            System.out.printf("arr[%d]=%d\n",i,arraydata[i]);
        }
    }

    //判断队列是否为空
    public boolean isEmpty(){
        if(font==rear){
            return true;
        }
        return false;
    }

    //判断队列是否满了
    public boolean isFull(){
        if((maxSize+1)%maxSize==font){
           return true;
        }
        return false;
    }

    //显示队列头数据
    public int headQueue(){
        if(isEmpty()){
            System.out.println("队列是空的");
        }
        return arraydata[font+1];
    }

}
